diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-08-30 23:03:50 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-08-30 23:03:50 +0200 |
commit | cf8baa122fb8b46a96ddbf090c91538343e7f01e (patch) | |
tree | 2196b42a46aa0ddde18aec066acedd366e00b94b | |
parent | 999e9bb0258426aebc90358202c86dcf6579dfaf (diff) | |
download | Chimère - projet Saclay-cf8baa122fb8b46a96ddbf090c91538343e7f01e.tar.bz2 Chimère - projet Saclay-cf8baa122fb8b46a96ddbf090c91538343e7f01e.zip |
Work on route form
-rw-r--r-- | forms.py | 11 | ||||
-rw-r--r-- | static/saclay/css/styles-saclay.css | 6 | ||||
-rw-r--r-- | static/saclay/js/interface.js | 91 | ||||
-rw-r--r-- | templates/chimere/blocks/routing.html | 5 | ||||
-rw-r--r-- | templates/chimere/edit.html | 44 | ||||
-rw-r--r-- | templates/chimere/main_map.html | 5 | ||||
-rw-r--r-- | urls.py | 4 | ||||
-rw-r--r-- | views.py | 46 |
8 files changed, 146 insertions, 66 deletions
@@ -24,7 +24,8 @@ from django import forms from django.utils.translation import ugettext as _ from chimere.models import SubCategory -from chimere.forms import MarkerForm as BaseMarkerForm +from chimere.forms import MarkerForm as BaseMarkerForm, \ + RouteForm as BaseRouteForm from chimere.widgets import TextareaWidget class MarkerForm(BaseMarkerForm): @@ -36,3 +37,11 @@ class MarkerForm(BaseMarkerForm): self.fields['categories'].widget.choices = [('', _(u"Select"))] + \ SubCategory.getAvailableTuples() +class RouteForm(BaseRouteForm): + categories = forms.ChoiceField(choices=[], widget=forms.Select) + description = forms.CharField(widget=TextareaWidget, required=False) + + def __init__(self, *args, **kwargs): + super(RouteForm, self).__init__(*args, **kwargs) + self.fields['categories'].widget.choices = [('', _(u"Select"))] + \ + SubCategory.getAvailableTuples() diff --git a/static/saclay/css/styles-saclay.css b/static/saclay/css/styles-saclay.css index 3d2784b..83c3743 100644 --- a/static/saclay/css/styles-saclay.css +++ b/static/saclay/css/styles-saclay.css @@ -508,6 +508,12 @@ input#id_name{ width:90%; } +#itinerary_field #id_transport_div, +#itinerary_field #id_speed_div +{ + display:none; +} + .single-line label{ display:inline-block; width:80px; diff --git a/static/saclay/js/interface.js b/static/saclay/js/interface.js index 9c7dec9..686e66e 100644 --- a/static/saclay/js/interface.js +++ b/static/saclay/js/interface.js @@ -1,12 +1,16 @@ $(function(){ - var _frm_editmarker_initialized; - var _frm_editroute_initialized; - var _frm_editevent_initialized; - var update_editmarker = function(){ + $('#action-edit-event').removeClass('ui-state-active'); + $('#action-edit-route').removeClass('ui-state-active'); + $('#action-edit-marker').addClass('ui-state-active'); + $('#frm-edit-route').hide(); + $('#frm-edit-event').hide(); + $('#frm-edit-marker').show(); $.ajax({url: edit_url, dataType: "html", success: function (data) { + $('#frm-edit-event').html(''); + $('#frm-edit-route').html(''); $('#frm-edit-marker').html(data); $("#main-map").chimere('activateMarkerEdit'); }, @@ -18,9 +22,17 @@ $(function(){ }; var update_editevent = function(){ + $('#action-edit-marker').removeClass('ui-state-active'); + $('#action-edit-route').removeClass('ui-state-active'); + $('#action-edit-event').addClass('ui-state-active'); + $('#frm-edit-marker').hide(); + $('#frm-edit-route').hide(); + $('#frm-edit-event').show(); $.ajax({url: edit_event_url, dataType: "html", success: function (data) { + $('#frm-edit-marker').html(''); + $('#frm-edit-route').html(''); $('#frm-edit-event').html(data); $("#main-map").chimere('activateMarkerEdit'); }, @@ -31,8 +43,36 @@ $(function(){ }); }; + var update_editroute = function(){ + $('#action-edit-marker').removeClass('ui-state-active'); + $('#action-edit-event').removeClass('ui-state-active'); + $('#action-edit-route').addClass('ui-state-active'); + $('#frm-edit-marker').hide(); + $('#frm-edit-event').hide(); + $('#frm-edit-route').show(); + $.ajax({url: edit_route_url, + dataType: "html", + success: function (data) { + $('#frm-edit-marker').html(''); + $('#frm-edit-event').html(''); + $('#frm-edit-route').html(data); + $("#main-map").chimere('activateRouteEdit'); + }, + error: function (data) { + $('#frm-edit-route').html("<p class='warning'>"+ + default_error_message+"</p>"); + } + }); + }; + $("#action-carte").click(function(){ $("#main-map").chimere('activateContextMenu'); + if($("#itinerary_field").html()){ + $("#chimere_itinerary_form").appendTo("#chimere_itinerary_panel"); + if($("#chimere_itinerary").css('display') != 'none'){ + $("#chimere_itinerary_form").hide(); + } + } $('#action-participate').removeClass('ui-state-active'); $('#action-carte').addClass('ui-state-active'); $('#edit-actions').hide(); @@ -48,45 +88,10 @@ $(function(){ $('#edit-actions').show(); $('#map-panel').hide(); $('#edit-panel').show(); - // if the default is initialized the other are not - if (!_frm_editmarker_initialized){ - update_editmarker(); - _frm_editmarker_initialized = true; - } - }); - - $("#action-edit-event").click(function(){ - if (!_frm_editevent_initialized){ - _frm_editevent_initialized = true; - update_editevent(); - } - $('#action-edit-marker').removeClass('ui-state-active'); - $('#action-edit-route').removeClass('ui-state-active'); - $('#action-edit-event').addClass('ui-state-active'); - $('#frm-edit-marker').hide(); - $('#frm-edit-route').hide(); - $('#frm-edit-event').show(); + update_editmarker(); }); - $("#action-edit-marker").click(function(){ - $('#action-edit-event').removeClass('ui-state-active'); - $('#action-edit-route').removeClass('ui-state-active'); - $('#action-edit-marker').addClass('ui-state-active'); - $('#frm-edit-route').hide(); - $('#frm-edit-event').hide(); - $('#frm-edit-marker').show(); - }); - - $("#action-edit-route").click(function(){ - if (!_frm_editroute_initialized){ - _frm_editroute_initialized = true; - update_editroute(); - } - $('#action-edit-event').removeClass('ui-state-active'); - $('#action-edit-marker').removeClass('ui-state-active'); - $('#action-edit-route').addClass('ui-state-active'); - $('#frm-edit-marker').hide(); - $('#frm-edit-event').hide(); - $('#frm-edit-route').show(); - }); + $("#action-edit-event").click(update_editevent); + $("#action-edit-marker").click(update_editmarker); + $("#action-edit-route").click(update_editroute); }); diff --git a/templates/chimere/blocks/routing.html b/templates/chimere/blocks/routing.html index accad59..2165a48 100644 --- a/templates/chimere/blocks/routing.html +++ b/templates/chimere/blocks/routing.html @@ -7,8 +7,9 @@ {{ hidden }} {% endfor %} {% for field in itinerary_form.visible_fields %} - {% if field.label %}<p><label for='{{field.auto_id}}'>{{ field.label }}</label></p>{%endif%} - <p>{{field}}</p> + <div id='{{field.auto_id}}_div'> + {% if field.label %}<label for='{{field.auto_id}}'>{{ field.label }}</label>{%endif%} + {{field}}</div> {% endfor %} <span id='search_routing'>{% trans "Search" %}</span> </div> diff --git a/templates/chimere/edit.html b/templates/chimere/edit.html index 9f39adf..f6a7a68 100644 --- a/templates/chimere/edit.html +++ b/templates/chimere/edit.html @@ -1,23 +1,32 @@ {% load i18n chimere_tags adminmedia inline_formset%} {% if submited %}{% submited %}{% endif %} <div class='edit'> - {% if event %} - <h3>{% trans "Add an event" %}</h3> + {% if event %}<h3>{% trans "Add an event" %}</h3> {% else %} - <h3>{% trans "Add a location" %}</h3> - {% endif%} + {% if route %}<h3>{% trans "Add a route" %}</h3> + {% else %}<h3>{% trans "Add a location" %}</h3> + {% endif%}{% endif%} <div class='notice'> Consigne d'utilisation : Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc eu luctus ipsum. Donec vel urna a turpis consectetur consectetur. Vestibulum ut enim vel odio porta vulputate. </div> <p class='notice'>* {% trans "indicates a mandatory field" %}</p> - <form enctype="multipart/form-data" method='post' action='{% url edit %}' id='marker_form'> + <form enctype="multipart/form-data" method='post' action='{% if route%}{% url edit-route%}{%else%}{% url edit %}{% endif %}' id='proposition_form'> {% csrf_token %} + {% if route %} + <h4 id='head_route' class='toggle maximized'>{% trans "Route" %} <span class='mandatory'>*</span></h4> + <div id='itinerary_field_contener'> + <input id='id_route' name='route' type='hidden'/> + <label class='error'>{% trans "Select a route for this new site (have you submit the search?)" %}</label> + <div id='itinerary_field'></div> + <hr/> + </div> + {% else %} <div class="fieldWrapper point_label"> <label class='error'>{% trans "Select a location for this new site" %}</label> <input type='hidden' id='id_point' name='point'/> - </div> + </div>{% endif %} <div class="fieldWrapper"> - <label for="id_name">{% trans "Name of the location"%} <span class='mandatory'>*</span></label> + <label for="id_name">{%if route%}{% trans "Name of the route"%}{% else %}{% if event %}{% trans "Name of the event"%}{% else %}{% trans "Name of the location"%}{% endif %}{% endif %} <span class='mandatory'>*</span></label> {% if form.name.errors %}<div class='errors'>{{ form.name.errors }}</div>{% endif %} {{ form.name }} </div> @@ -29,7 +38,7 @@ <hr/> {% if event %} <div class="fieldWrapper"> - <label for="id_start_date">{% trans "Start date" %}</label> + <label for="id_start_date">{% trans "Start date" %} <span class='mandatory'>*</span></label> {{ form.start_date.errors }} {{ form.start_date }} </div> @@ -108,9 +117,13 @@ <p>{% trans "Upload in progress. Please wait..." %}</p> <p><img src='{{STATIC_URL}}chimere/img/ajax-loader.gif'/></p> </div> - <p><button id='marker_form_submit' type='button'>{% trans 'Propose'%}</button></p> + <p><button id='proposition_form_submit' type='button'>{% trans 'Propose'%}</button></p> <script text='text/javascript'> $(function(){ + {% if route %} + $("#chimere_itinerary_form").appendTo($("#itinerary_field")); + $('#main_map').chimere('updateRoutingInput'); + {% else %}$('#main_map').chimere('updateMarkerInput');{% endif %} $('.toggle').click(function(){ var div_item = $(this).next(); div_item.toggle(); @@ -130,14 +143,15 @@ dialogClass:'alert-box' } ); - $('#marker_form_submit').click(function(){ + $('#proposition_form_submit').click(function(){ // JS tests because if a file is submited there is no way // to refill the form with (browser security issue) tinyMCE.triggerSave(); - validation = [ - 'id_point', + validation = [{%if route%} + 'id_route'{%else%}'id_point'{% endif %}, 'id_name', - 'id_categories', + 'id_categories',{% if event %} + 'id_start_date',{% endif %} 'id_submiter_email' ]; var validated = true; @@ -160,9 +174,9 @@ $("#panel").scrollTop(0); return false; } - $("#marker_form").ajaxForm(); + $("#proposition_form").ajaxForm(); $("#upload_in_progress").dialog('open'); - $("#marker_form").ajaxSubmit({ + $("#proposition_form").ajaxSubmit({ target:"#frm-edit-marker", success:function(msg){ $("#panel").scrollTop(0); diff --git a/templates/chimere/main_map.html b/templates/chimere/main_map.html index 4eb33ae..e5ec99e 100644 --- a/templates/chimere/main_map.html +++ b/templates/chimere/main_map.html @@ -13,8 +13,9 @@ <script type='text/javascript' language='javascript'> var default_error_message = "{% trans "Error while loading the page... Refresh the page. If the problem persist contact the webmaster." %}"; - var edit_url = {% url edit %}; - var edit_event_url = {% url edit-event %}; + var edit_url = "{% url edit %}"; + var edit_event_url = "{% url edit-event %}"; + var edit_route_url = "{% url edit-route %}"; </script> <script src="{{ STATIC_URL }}saclay/js/interface.js"></script> {% endblock %} @@ -42,6 +42,10 @@ urlpatterns += patterns('', url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?edit-event/(?P<item_id>\w+)/(?P<submited>\w+)?$', 'chimere_saclay.views.edit', kwargs={'event':True}, name="edit-event-item"), + url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?edit-route/$', + 'chimere_saclay.views.edit_route', name="edit-route"), + url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?edit-route/(?P<item_id>\w+)/(?P<submited>\w+)?$', + 'chimere_saclay.views.edit_route', name="edit-route-item"), url(r'^', include('chimere.urls', namespace="chimere")), ) @@ -21,10 +21,10 @@ from django.conf import settings from django.shortcuts import render_to_response from django.template import RequestContext -from forms import MarkerForm +from forms import MarkerForm, RouteForm from chimere.actions import actions -from chimere.models import Marker, PropertyModel +from chimere.models import Marker, Route, PropertyModel from chimere.views import get_edit_page get_edit_marker = get_edit_page('edit', Marker, MarkerForm) @@ -59,7 +59,47 @@ def edit(request, area_name="", item_id=None, submited=False, event=False): 'properties':declared_fields, 'filtered_properties':filtered_properties, 'submited':submited, - 'event':event + 'event':event, + }) + # manualy populate the custom widget + if 'subcategory' in form.data and form.data['subcategory']: + response_dct['current_category'] = int(form.data['subcategory']) + return render_to_response('chimere/edit.html', response_dct, + context_instance=RequestContext(request)) + +get_edit_route = get_edit_page('edit-route', Route, RouteForm) + +def edit_route(request, area_name="", item_id=None, submited=False): + """ + Edition page + """ + response, values, sub_categories = get_edit_route(request, area_name, + item_id, ['M', 'B']) + if response: + return response + item_id, init_item, response_dct, form, formset_multi, formset_picture = \ + values + # get the "manualy" declared_fields. Ie: properties + declared_fields = form.declared_fields.keys() + declared_fields = PropertyModel.objects.filter(available=True).all() + filtered_properties = PropertyModel.objects.filter(available=True, + subcategories__id__isnull=False).all() + response_dct.update({ + 'actions':actions, + 'action_selected':('contribute', 'edit'), + 'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER, + 'form':form, + 'formset_multi':formset_multi, + 'formset_picture':formset_picture, + 'dated':settings.CHIMERE_DAYS_BEFORE_EVENT, + 'extra_head':form.media, + 'marker_id':item_id, + 'sub_categories':sub_categories, + 'point_widget':'', + 'properties':declared_fields, + 'filtered_properties':filtered_properties, + 'submited':submited, + 'route':True }) # manualy populate the custom widget if 'subcategory' in form.data and form.data['subcategory']: |